package jannex.sql;

import jannex.JannexException;

import java.sql.DatabaseMetaData;
import java.sql.RowIdLifetime;

public interface JxDatabaseMetaData extends DatabaseMetaData, AutoCloseable {

    @Override
    boolean allProceduresAreCallable() throws JannexException;

    @Override
    boolean allTablesAreSelectable() throws JannexException;

    @Override
    String getURL() throws JannexException;

    @Override
    String getUserName() throws JannexException;

    @Override
    boolean isReadOnly() throws JannexException;

    @Override
    boolean nullsAreSortedHigh() throws JannexException;

    @Override
    boolean nullsAreSortedLow() throws JannexException;

    @Override
    boolean nullsAreSortedAtStart() throws JannexException;

    @Override
    boolean nullsAreSortedAtEnd() throws JannexException;

    @Override
    String getDatabaseProductName() throws JannexException;

    @Override
    String getDatabaseProductVersion() throws JannexException;

    @Override
    String getDriverName() throws JannexException;

    @Override
    String getDriverVersion() throws JannexException;

    @Override
    int getDriverMajorVersion() throws JannexException;

    @Override
    int getDriverMinorVersion() throws JannexException;

    @Override
    boolean usesLocalFiles() throws JannexException;

    @Override
    boolean usesLocalFilePerTable() throws JannexException;

    @Override
    boolean supportsMixedCaseIdentifiers() throws JannexException;

    @Override
    boolean storesUpperCaseIdentifiers() throws JannexException;

    @Override
    boolean storesLowerCaseIdentifiers() throws JannexException;

    @Override
    boolean storesMixedCaseIdentifiers() throws JannexException;

    @Override
    boolean supportsMixedCaseQuotedIdentifiers() throws JannexException;

    @Override
    boolean storesUpperCaseQuotedIdentifiers() throws JannexException;

    @Override
    boolean storesLowerCaseQuotedIdentifiers() throws JannexException;

    @Override
    boolean storesMixedCaseQuotedIdentifiers() throws JannexException;

    @Override
    String getIdentifierQuoteString() throws JannexException;

    @Override
    String getSQLKeywords() throws JannexException;

    @Override
    String getNumericFunctions() throws JannexException;

    @Override
    String getStringFunctions() throws JannexException;

    @Override
    String getSystemFunctions() throws JannexException;

    @Override
    String getTimeDateFunctions() throws JannexException;

    @Override
    String getSearchStringEscape() throws JannexException;

    @Override
    String getExtraNameCharacters() throws JannexException;

    @Override
    boolean supportsAlterTableWithAddColumn() throws JannexException;

    @Override
    boolean supportsAlterTableWithDropColumn() throws JannexException;

    @Override
    boolean supportsColumnAliasing() throws JannexException;

    @Override
    boolean nullPlusNonNullIsNull() throws JannexException;

    @Override
    boolean supportsConvert() throws JannexException;

    @Override
    boolean supportsConvert(int fromType, int toType) throws JannexException;

    @Override
    boolean supportsTableCorrelationNames() throws JannexException;

    @Override
    boolean supportsDifferentTableCorrelationNames() throws JannexException;

    @Override
    boolean supportsExpressionsInOrderBy() throws JannexException;

    @Override
    boolean supportsOrderByUnrelated() throws JannexException;

    @Override
    boolean supportsGroupBy() throws JannexException;

    @Override
    boolean supportsGroupByUnrelated() throws JannexException;

    @Override
    boolean supportsGroupByBeyondSelect() throws JannexException;

    @Override
    boolean supportsLikeEscapeClause() throws JannexException;

    @Override
    boolean supportsMultipleResultSets() throws JannexException;

    @Override
    boolean supportsMultipleTransactions() throws JannexException;

    @Override
    boolean supportsNonNullableColumns() throws JannexException;

    @Override
    boolean supportsMinimumSQLGrammar() throws JannexException;

    @Override
    boolean supportsCoreSQLGrammar() throws JannexException;

    @Override
    boolean supportsExtendedSQLGrammar() throws JannexException;

    @Override
    boolean supportsANSI92EntryLevelSQL() throws JannexException;

    @Override
    boolean supportsANSI92IntermediateSQL() throws JannexException;

    @Override
    boolean supportsANSI92FullSQL() throws JannexException;

    @Override
    boolean supportsIntegrityEnhancementFacility() throws JannexException;

    @Override
    boolean supportsOuterJoins() throws JannexException;

    @Override
    boolean supportsFullOuterJoins() throws JannexException;

    @Override
    boolean supportsLimitedOuterJoins() throws JannexException;

    @Override
    String getSchemaTerm() throws JannexException;

    @Override
    String getProcedureTerm() throws JannexException;

    @Override
    String getCatalogTerm() throws JannexException;

    @Override
    boolean isCatalogAtStart() throws JannexException;

    @Override
    String getCatalogSeparator() throws JannexException;

    @Override
    boolean supportsSchemasInDataManipulation() throws JannexException;

    @Override
    boolean supportsSchemasInProcedureCalls() throws JannexException;

    @Override
    boolean supportsSchemasInTableDefinitions() throws JannexException;

    @Override
    boolean supportsSchemasInIndexDefinitions() throws JannexException;

    @Override
    boolean supportsSchemasInPrivilegeDefinitions() throws JannexException;

    @Override
    boolean supportsCatalogsInDataManipulation() throws JannexException;

    @Override
    boolean supportsCatalogsInProcedureCalls() throws JannexException;

    @Override
    boolean supportsCatalogsInTableDefinitions() throws JannexException;

    @Override
    boolean supportsCatalogsInIndexDefinitions() throws JannexException;

    @Override
    boolean supportsCatalogsInPrivilegeDefinitions() throws JannexException;

    @Override
    boolean supportsPositionedDelete() throws JannexException;

    @Override
    boolean supportsPositionedUpdate() throws JannexException;

    @Override
    boolean supportsSelectForUpdate() throws JannexException;

    @Override
    boolean supportsStoredProcedures() throws JannexException;

    @Override
    boolean supportsSubqueriesInComparisons() throws JannexException;

    @Override
    boolean supportsSubqueriesInExists() throws JannexException;

    @Override
    boolean supportsSubqueriesInIns() throws JannexException;

    @Override
    boolean supportsSubqueriesInQuantifieds() throws JannexException;

    @Override
    boolean supportsCorrelatedSubqueries() throws JannexException;

    @Override
    boolean supportsUnion() throws JannexException;

    @Override
    boolean supportsUnionAll() throws JannexException;

    @Override
    boolean supportsOpenCursorsAcrossCommit() throws JannexException;

    @Override
    boolean supportsOpenCursorsAcrossRollback() throws JannexException;

    @Override
    boolean supportsOpenStatementsAcrossCommit() throws JannexException;

    @Override
    boolean supportsOpenStatementsAcrossRollback() throws JannexException;

    @Override
    int getMaxBinaryLiteralLength() throws JannexException;

    @Override
    int getMaxCharLiteralLength() throws JannexException;

    @Override
    int getMaxColumnNameLength() throws JannexException;

    @Override
    int getMaxColumnsInGroupBy() throws JannexException;

    @Override
    int getMaxColumnsInIndex() throws JannexException;

    @Override
    int getMaxColumnsInOrderBy() throws JannexException;

    @Override
    int getMaxColumnsInSelect() throws JannexException;

    @Override
    int getMaxColumnsInTable() throws JannexException;

    @Override
    int getMaxConnections() throws JannexException;

    @Override
    int getMaxCursorNameLength() throws JannexException;

    @Override
    int getMaxIndexLength() throws JannexException;

    @Override
    int getMaxSchemaNameLength() throws JannexException;

    @Override
    int getMaxProcedureNameLength() throws JannexException;

    @Override
    int getMaxCatalogNameLength() throws JannexException;

    @Override
    int getMaxRowSize() throws JannexException;

    @Override
    boolean doesMaxRowSizeIncludeBlobs() throws JannexException;

    @Override
    int getMaxStatementLength() throws JannexException;

    @Override
    int getMaxStatements() throws JannexException;

    @Override
    int getMaxTableNameLength() throws JannexException;

    @Override
    int getMaxTablesInSelect() throws JannexException;

    @Override
    int getMaxUserNameLength() throws JannexException;

    @Override
    int getDefaultTransactionIsolation() throws JannexException;

    @Override
    boolean supportsTransactions() throws JannexException;

    @Override
    boolean supportsTransactionIsolationLevel(int level) throws JannexException;

    @Override
    boolean supportsDataDefinitionAndDataManipulationTransactions() throws JannexException;

    @Override
    boolean supportsDataManipulationTransactionsOnly() throws JannexException;

    @Override
    boolean dataDefinitionCausesTransactionCommit() throws JannexException;

    @Override
    boolean dataDefinitionIgnoredInTransactions() throws JannexException;

    @Override
    JxResultSet getProcedures(String catalog, String schemaPattern, String procedureNamePattern) throws JannexException;

    @Override
    JxResultSet getProcedureColumns(String catalog, String schemaPattern, String procedureNamePattern, String columnNamePattern) throws JannexException;

    @Override
    JxResultSet getTables(String catalog, String schemaPattern, String tableNamePattern, String[] types) throws JannexException;

    @Override
    JxResultSet getSchemas() throws JannexException;

    @Override
    JxResultSet getCatalogs() throws JannexException;

    @Override
    JxResultSet getTableTypes() throws JannexException;

    @Override
    JxResultSet getColumns(String catalog, String schemaPattern, String tableNamePattern, String columnNamePattern) throws JannexException;

    @Override
    JxResultSet getColumnPrivileges(String catalog, String schema, String table, String columnNamePattern) throws JannexException;

    @Override
    JxResultSet getTablePrivileges(String catalog, String schemaPattern, String tableNamePattern) throws JannexException;

    @Override
    JxResultSet getBestRowIdentifier(String catalog, String schema, String table, int scope, boolean nullable) throws JannexException;

    @Override
    JxResultSet getVersionColumns(String catalog, String schema, String table) throws JannexException;

    @Override
    JxResultSet getPrimaryKeys(String catalog, String schema, String table) throws JannexException;

    @Override
    JxResultSet getImportedKeys(String catalog, String schema, String table) throws JannexException;

    @Override
    JxResultSet getExportedKeys(String catalog, String schema, String table) throws JannexException;

    @Override
    JxResultSet getCrossReference(String parentCatalog, String parentSchema, String parentTable, String foreignCatalog, String foreignSchema, String foreignTable) throws JannexException;

    @Override
    JxResultSet getTypeInfo() throws JannexException;

    @Override
    JxResultSet getIndexInfo(String catalog, String schema, String table, boolean unique, boolean approximate) throws JannexException;

    @Override
    boolean supportsResultSetType(int type) throws JannexException;

    @Override
    boolean supportsResultSetConcurrency(int type, int concurrency) throws JannexException;

    @Override
    boolean ownUpdatesAreVisible(int type) throws JannexException;

    @Override
    boolean ownDeletesAreVisible(int type) throws JannexException;

    @Override
    boolean ownInsertsAreVisible(int type) throws JannexException;

    @Override
    boolean othersUpdatesAreVisible(int type) throws JannexException;

    @Override
    boolean othersDeletesAreVisible(int type) throws JannexException;

    @Override
    boolean othersInsertsAreVisible(int type) throws JannexException;

    @Override
    boolean updatesAreDetected(int type) throws JannexException;

    @Override
    boolean deletesAreDetected(int type) throws JannexException;

    @Override
    boolean insertsAreDetected(int type) throws JannexException;

    @Override
    boolean supportsBatchUpdates() throws JannexException;

    @Override
    JxResultSet getUDTs(String catalog, String schemaPattern, String typeNamePattern, int[] types) throws JannexException;

    @Override
    JxConnection getConnection() throws JannexException;

    @Override
    boolean supportsSavepoints() throws JannexException;

    @Override
    boolean supportsNamedParameters() throws JannexException;

    @Override
    boolean supportsMultipleOpenResults() throws JannexException;

    @Override
    boolean supportsGetGeneratedKeys() throws JannexException;

    @Override
    JxResultSet getSuperTypes(String catalog, String schemaPattern, String typeNamePattern) throws JannexException;

    @Override
    JxResultSet getSuperTables(String catalog, String schemaPattern, String tableNamePattern) throws JannexException;

    @Override
    JxResultSet getAttributes(String catalog, String schemaPattern, String typeNamePattern, String attributeNamePattern) throws JannexException;

    @Override
    boolean supportsResultSetHoldability(int holdability) throws JannexException;

    @Override
    int getResultSetHoldability() throws JannexException;

    @Override
    int getDatabaseMajorVersion() throws JannexException;

    @Override
    int getDatabaseMinorVersion() throws JannexException;

    @Override
    int getJDBCMajorVersion() throws JannexException;

    @Override
    int getJDBCMinorVersion() throws JannexException;

    @Override
    int getSQLStateType() throws JannexException;

    @Override
    boolean locatorsUpdateCopy() throws JannexException;

    @Override
    boolean supportsStatementPooling() throws JannexException;

    @Override
    RowIdLifetime getRowIdLifetime() throws JannexException;

    @Override
    JxResultSet getSchemas(String catalog, String schemaPattern) throws JannexException;

    @Override
    boolean supportsStoredFunctionsUsingCallSyntax() throws JannexException;

    @Override
    boolean autoCommitFailureClosesAllResultSets() throws JannexException;

    @Override
    JxResultSet getClientInfoProperties() throws JannexException;

    @Override
    JxResultSet getFunctions(String catalog, String schemaPattern, String functionNamePattern) throws JannexException;

    @Override
    JxResultSet getFunctionColumns(String catalog, String schemaPattern, String functionNamePattern, String columnNamePattern) throws JannexException;

    @Override
    JxResultSet getPseudoColumns(String catalog, String schemaPattern, String tableNamePattern, String columnNamePattern) throws JannexException;

    @Override
    boolean generatedKeyAlwaysReturned() throws JannexException;

    @Override
    <T> T unwrap(Class<T> iface) throws JannexException;

    @Override
    boolean isWrapperFor(Class<?> iface) throws JannexException;
}